#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <termios.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include "../inc/gpio.h"

at91_pio_arg arg;


void init_IP_JP( int fd_pio )
{
	arg.pin_idx = IP_JP; 
	arg.pin_dir = AT91PIO_DIR_INP;
	ioctl(fd_pio, IOCTL_PIO_SETDIR, &arg);
}

int gpio_in(int fd, int pin)
{
	at91_pio_arg arg;
	
	arg.pin_idx = pin; 
	ioctl(fd, IOCTL_PIO_GETSTA, &arg);
	
	return arg.pin_sta;
}

void gpio_out(int fd, int pin, int val)
{
	at91_pio_arg arg;

	arg.pin_idx = pin; 
	
	if(val & 0x01)
		arg.pin_sta = 1;
	else
		arg.pin_sta = 0;
	
	ioctl(fd, IOCTL_PIO_SETSTA, &arg);
}

void init_sw( int fd_pio )
{
	arg.pin_idx = sw1; 
	arg.pin_dir = AT91PIO_DIR_INP;
	ioctl(fd_pio, IOCTL_PIO_SETDIR, &arg);
	
	arg.pin_idx = sw2; 
	arg.pin_dir = AT91PIO_DIR_INP;
	ioctl(fd_pio, IOCTL_PIO_SETDIR, &arg);
	
	arg.pin_idx = sw3; 
	arg.pin_dir = AT91PIO_DIR_INP;
	ioctl(fd_pio, IOCTL_PIO_SETDIR, &arg);
	
	arg.pin_idx = sw4; 
	arg.pin_dir = AT91PIO_DIR_INP;
	ioctl(fd_pio, IOCTL_PIO_SETDIR, &arg);
	
//	printf( "init_sw:%d", sw_rd(fd_pio) );
}

int sw_rd(int fd_pio)
{
	
	int sw_v=0, t;
	
	t = gpio_in(fd_pio,sw1);
	sw_v = t;
	printf("sw is %x\n",t);
	t = gpio_in(fd_pio,sw2);
	sw_v += t<<1;
	printf("sw is %x\n",t);
	t = gpio_in(fd_pio,sw3);
	sw_v += t<<2;
	printf("sw is %x\n",t);
	t = gpio_in(fd_pio,sw4);
	sw_v += t<<3;
	printf("sw is %x\n",t);
	return (~sw_v) & 0xf;
}
